﻿Create PROCEDURE [dbo].[proc_UnidadesContratosRefeicoesLoadUnidadesByRefeicaoContratada]
(
	@IdRefeicaoContratada bigint
	
)
AS
BEGIN
	SET NOCOUNT ON
	DECLARE @Err int
	DECLARE @IdUnidadePrincipal bigint

	SELECT @IdUnidadePrincipal = c.IdUnidade 
	  FROM ContratosRefeicoes cr
			INNER JOIN Contratos c on c.NumeroContrato = cr.NumeroContrato
	 WHERE cr.IdRefeicaoContratada = @IdRefeicaoContratada;	
	
	WITH UnidadesCTE (IdUnidade, UnidadePai)
		as
		(
			SELECT u.IdUnidade, u.UnidadePai 
			  FROM unidades u 
			 WHERE u.IdUnidade = @IdUnidadePrincipal 
			UNION ALL
			SELECT u.IdUnidade, u.UnidadePai 
  			  FROM unidades u 
				inner join UnidadesCTE cte on cte.IdUnidade = u.UnidadePai 
		)

	SELECT
		cr.[IdRefeicaoContratada],
		cr.CodTipoRefeicao,
		ttr.Descricao as DescricaoTipoRefeicao,
		ttr.DescricaoCurta as DescricaoCurtaTipoRefeicao,
		ttr.Simbolo as SimboloTipoRefeicao,
		ttr.Tipo as TipoTipoRefeicao,
		cr.CodTipoClasseRefeitorio,
		tcr.Descricao as DescricaoTipoClasse,
		tcr.DescricaoCurta as DescricaoCurtaTipoClasse,
		tcr.Simbolo as SimboloTipoClasse,
		tcr.Tipo as TipoTipoClasse,
		u.[IdUnidade],
		u.IdCliente,
		u.Designacao as DesignacaoUnidade,
		u.Servico,
		u.UnidadePai,
		ucr.[CodTipoServico],
		t.Descricao as DescricaoTipoServico,
		t.DescricaoCurta as DescricaoCurtaTipoServico,
		t.Simbolo as SimboloTipoServico,
		t.Tipo as TipoTipoServico,
		CASE 
			WHEN ucr.IdUnidade IS null THEN 0
			ELSE 1
		END as Activa,
		ucr.[DataCriacao],
		ucr.[DataAlteracao]
	 FROM Unidades u
			inner join UnidadesCTE cte on u.IdUnidade = cte.IdUnidade
				inner join ContratosRefeicoes cr on cr.IdRefeicaoContratada = @IdRefeicaoContratada  
						inner join Contratos c on c.NumeroContrato = cr.NumeroContrato
			 				inner join Tipologias ttr on ttr.Codigo = cr.CodTipoRefeicao
								left join Tipologias tcr on tcr.Codigo = cr.CodTipoClasseRefeitorio
				left join [UnidadesContratosRefeicoes] ucr on ucr.IdUnidade = u.IdUnidade 
				                                      and ucr.IdRefeicaoContratada = @IdRefeicaoContratada
					 left join Tipologias t on t.Codigo = ucr.CodTipoServico
	

	SET @Err = @@Error

	RETURN @Err
END
